package com.qf.demo;

import com.qf.dao.AccountDao;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

/**
 * @ClassName AccountTest
 * @Description TODO
 * @Author 86181
 * @Date 2022/8/29 23:05
 * @Version 1.0
 **/
public class AccountTest {
    public static void main(String[] args) {
        //初始化容器,在Spring-ioc容器里面是一个单例,初始化时只执行了一次
//        ApplicationContext applicationContext = new ClassPathXmlApplicationContext("bean.xml");
        //获取bean,默认是一个单例
        //如何将bean变成一个多例,利用scope标签,获取时,才会进行初始化
//        AccountDao accountDao = (AccountDao) applicationContext.getBean("accountDao");
//        AccountDao accountDao1 = (AccountDao) applicationContext.getBean("accountDao");
//        AccountDao accountDao2 = (AccountDao) applicationContext.getBean("accountDao");
//        System.out.println(accountDao==accountDao1);
//        System.out.println(accountDao1==accountDao2);
//        System.out.println(accountDao);
//        System.out.println(accountDao1);
//        System.out.println(accountDao2);
//        accountDao.addAccount();

        //初始化容器
        ApplicationContext applicationContext = new ClassPathXmlApplicationContext("bean.xml");
        //获取bean,默认是一个单例
        //如何将bean变成一个多例,利用scope标签,获取时,才会进行初始化
        AccountDao accountDao = (AccountDao) applicationContext.getBean("accountDao");
        //关闭容器(即容器销毁=当前单例对象不存在)
        ((ClassPathXmlApplicationContext) applicationContext).close();
//        System.out.println(accountDao);//理应说对象就不存在了,但是还有一个缓存机制(先了解)
//        accountDao.addAccount();//销毁后该方法还是能执行,ioc里面还有缓存
        //由jvm的java虚拟机来决定,垃圾回收机制决定该对象的死亡与否
        //如果scope是多例:不会执行destroy-method,初始化肯定会执行
        //如果是单例,会执行
    }

}
